Skip to content

Release v1.2.0 — refonte du module Statistiques - #310

Merged
horacioskrp merged 11 commits into
developfrom
feat/stats-charts
Sep 3, 2026
Merged

Release v1.2.0 — refonte du module Statistiques#310
horacioskrp merged 11 commits into
developfrom
feat/stats-charts

Conversation

@horacioskrp

Copy link
Copy Markdown
Collaborator

Résumé

Refonte du module Statistiques (v1.2.0) : graphiques plus lisibles, accessibles (palette validée en vision déficiente, mode sombre), interactifs, et ventilés par sexe / filtrables là où c'est pertinent.

Ajouté

  • Comparaisons : variations vs N‑1, split Performance / Déperdition, années passées semées pour de vraies tendances.
  • Géographie : treemap région → préfecture coloré par région + KPI de concentration.
  • Réussite & examens : examens officiels (CEPD/BEPC/BAC) avec résultats, et répartition des mentions alimentée.
  • Effectifs & parité : pyramide des âges par sexe, origine géographique par sexe, filtre par cycle + tri sur les classes.
  • Statistiques élèves (module Élèves) refondue : vrais charts thémés, dark mode, parité, âge moyen, sur‑âge, filtres.
  • Âge attendu par classe → active le calcul du sur‑âge.

Corrigé

  • Répartition des mentions vide (normalisation des libellés).
  • Lisibilité géographie (couleurs par région, libellés en graisse normale).

Détail dans CHANGELOG.md. StatisticsTest et StudentStatsTest verts, tsc + build OK.

🤖 Generated with Claude Code

L'onglet « Comparaisons » compare les années académiques, mais la démo n'en
avait qu'une : les tendances n'affichaient qu'un point. DemoSeeder génère
désormais deux années révolues (2023-2024, 2024-2025) avec juste ce qu'il faut
pour alimenter les agrégats pluriannuels — inscriptions (statuts décidés →
redoublement/abandon), factures (recouvrement), bulletins verrouillés (réussite)
et examen officiel (admission) — via des insertions directes, sans repasser par
tout le pipeline d'évaluation. Progression volontaire vers l'année courante
(effectif et réussite en hausse, redoublement et abandon en baisse).
Comparaisons — ajoute une rangée de KPI avec variation vs année précédente
(couleur selon le sens : hausse d'effectif/réussite = vert, hausse d'abandon =
rouge). Sépare l'ancien graphe « taux » fourre-tout en deux lectures :
« Performance » (réussite, recouvrement) et « Déperdition » (redoublement,
abandon). L'année en cours n'est pas tracée pour les taux de fin d'année (non
encore décidés) au lieu de plonger à zéro. Tooltips thémés (lisibles en sombre)
et palette validée (fin du rouge codé en dur).

Géographie — remplace les deux barres bleues déconnectées par un treemap
hiérarchique région → préfecture : l'aire porte la magnitude, une rampe
séquentielle l'intensité, les libellés l'identité (jamais une couleur par
région, indistinguable en daltonisme au-delà de trois ou quatre). Ajoute des
KPI de concentration (couverture, part du Grand Lomé, régions, préfectures) et
conserve une barre par région. Le backend renvoie les 40 préfectures (au lieu
du top 20) pour que la hiérarchie du treemap soit complète et cohérente.
La rampe séquentielle à teinte unique rendait les préfectures à faible effectif
presque invisibles (bleu très clair sur fond blanc) et ne distinguait pas les
régions. Chaque région reçoit désormais sa propre teinte, déclinée en trois
nuances selon l'effectif de la préfecture ; une légende de régions accompagne le
treemap et les barres « par région » reprennent les mêmes couleurs.

Palette soutenue passée au validateur daltonien de la méthode : contraste ≥ 3:1
sur fond clair et sombre, séparation en vision normale 23,7, et le seul écart
en protanopie (ambre↔vert, ΔE 6,2) tombe dans la bande autorisée par les
encodages secondaires présents — position, légende, libellés et barres.
La répartition des mentions agrégeait sur des clés normalisées
(passable/assez_bien/bien/tres_bien) mais compare au libellé brut stocké dans
le bulletin (« Très bien », « Assez bien »…). Résultat : répartition vide dès
que le barème n'utilise pas exactement ces slugs. Les libellés sont désormais
normalisés (accents, casse, ponctuation ignorés) avant d'être repliés sur les
quatre paliers.
Alimente l'onglet Réussite & examens pour l'année en cours :
- barème de démo basculé sur les quatre mentions standard (Passable → Très
  bien), ce qu'agrège la répartition des mentions ;
- examens officiels CEPD, BEPC et BAC de l'année active, avec inscriptions des
  classes concernées (CM2, 3ème, Terminale) et résultats admis/échoué/absent
  selon un taux d'admission plausible par examen.
Idempotent : ne refait rien si des résultats existent déjà.
Les classes n'avaient pas d'\''âge attendu (colonne expected_age), si bien que le
taux de sur-âge des statistiques restait vide. DemoSeeder renseigne désormais
l'\''âge normal par niveau (CP1 = 6 ans … Terminale = 18), de façon idempotente.
La page utilisait des barres CSS maison, sans mode sombre, avec des couleurs
hors palette (rose/violet/emerald codés en dur) — un cran sous la page
Statistiques (école).

- Vrais graphiques Recharts thémés via chart-theme : donut de répartition par
  sexe, histogramme des tranches d'\''âge (rampe séquentielle), barres d'\''effectifs
  par classe triées par effectif — tous avec survol et mode sombre.
- Palette CVD-validée (Garçons bleu / Filles orange, comme la page école) au
  lieu du bleu/rose genré.
- KPI enrichis : âge moyen et taux de sur-âge (retard scolaire) en plus des
  effectifs, parité (% filles + IPS) mise en avant sur le donut.
- La vue nationalité (100 % togolaise, sans intérêt) laisse place à la parité.
La barre « effectifs par classe » alignait 21 classes d'un bloc. Elle devient :
- filtrable par cycle (Maternelle / Primaire / Collège / Lycée) et triable
  (par niveau ou par effectif), côté client, sans rechargement ;
- empilée par sexe (garçons / filles) pour lire la parité classe par classe ;
- dotée d'une infobulle riche : total, capacité et taux de remplissage.

Le contrôleur enrichit chaque classe (cycle, sexe, capacité, niveau) et ordonne
par niveau via l'âge attendu.
… cycle

Onglet Effectifs & parité :
- Pyramide des âges refaite en vraie pyramide divergente garçons / filles
  (au lieu d'un simple histogramme du total).
- « Origine géographique (top villes) » passe d'une liste texte à des barres
  empilées par sexe.
- Le graphe « effectifs par classe » gagne un filtre par cycle (Maternelle /
  Primaire / Collège / Lycée) et un tri (niveau / effectif), côté client.

Backend : enrollmentStats ventile la distribution des âges et les villes par
sexe, et enrichit les classes du cycle (ordonnées par niveau via l'âge attendu).
L'export PDF/xlsx suit ce nouveau format (by_class et by_city en tableaux, villes
ventilées par sexe).
@horacioskrp
horacioskrp merged commit 8f6c755 into develop Sep 3, 2026
2 checks passed
@horacioskrp horacioskrp mentioned this pull request Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant